////////////////////////////////////////////////////////////////////////////////

#include "server_gui.h"

////////////////////////////////////////////////////////////////////////////////


ServerGUI::ServerGUI()
:m_Network( m_RecvQueue,
            m_SendQueue,
            m_SendQueueMutex,
            m_RecvQueueMutex,
            "37016",
            "37015" )
{
}


////////////////////////////////////////////////////////////////////////////////


ServerGUI::~ServerGUI()
{
}


////////////////////////////////////////////////////////////////////////////////


void ServerGUI::Start()
{
    m_Network.Start();

    ServerPacket m_PrevPacket;

    while (true)
    {
        m_RecvQueueMutex.Lock();

        // Process events
        while( !m_RecvQueue.empty() )
        {
            ClientPacket& packet = m_RecvQueue.back();

            m_Engine.ProcessEvents( packet.m_KeyFlags,
                                    packet.m_MousePosition );
            m_RecvQueue.pop();
        }

        m_RecvQueueMutex.Unlock();

        // Process logic
        m_Engine.ProcessLogic();

        ServerPacket packet;
        m_Engine.FetchDrawData( packet.m_Players,
                                packet.m_Bullets );

        if (packet != m_PrevPacket)
        {
            m_PrevPacket = packet;

            m_SendQueueMutex.Lock();
            m_SendQueue.push(packet);
            m_SendQueueMutex.Unlock();
        }

        // Delay
        Timer::Delay(30);
    }
}


////////////////////////////////////////////////////////////////////////////////


void ServerGUI::ProcessEvents()
{
}


////////////////////////////////////////////////////////////////////////////////
